#pragma once

typedef struct list {
    struct list* next;
    int data;
}list_t;

extern list_t *new_list_node(int data);   //�½�һ�����
extern list_t *list_add(list_t *list, int data);   //ͷ�巨����һ�����
extern void list_destroy(list_t *list);  //��������
extern list_t *list_delete_node(list_t *list, list_t *node);  //ɾ��ĳ������
extern list_t *list_delete(list_t *list, int data);  //ɾ��ĳ��λ�õĽ��
extern list_t *list_index_of(list_t *list, int index);   //����ĳ��λ�õĽ��
extern void list_print(list_t *list);   //��ӡ��������
extern list_t *get_list_head(list_t **list);  //获取链表第一个结点
extern int list_length(list_t *list);  //获取链表长度

//带有哨兵的单链表
typedef struct list_head{
    struct list_t *tail;
    struct list_t *head;
}list_head_t;
extern void linked_list_init(list_head_t *l);
extern void linked_list_add(list_head_t *l, int data);
extern void linked_list_destroy(list_head_t *l);
extern void linked_list_length(list_head_t *l);
extern void linked_list_print(list_head_t *l);

